﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using PFC.Program.Profile;
using System.Security.Cryptography;

namespace PFC.Program.Verification.Pages
{
    /// <summary>
    /// Логика взаимодействия для Login.xaml
    /// </summary>
    public partial class Login : Page
    {

        public Login()
        {
            InitializeComponent();
        }

        /* Вход в свой профиль */
        private void button_Authorization_Click(object sender, RoutedEventArgs e)
        {
            // Переменные для MessageBox //
            string aut = "Аутентификация";
            string error_null = "Ошибка! Есть пустые поля.";
            string error_loginPas = "Ошибка! Пароль или логин не верный.";

            // Проверка на существование данных в полях //
            if (textBox_login.Text != null && textBox_login.Text != "" &&
                passwordBox_password.Password != null &&
                passwordBox_password.Password != "")
            {
                bool flag = false;

                SqlDataReader readerAuthorization = ClassRequests.GetReader_Authorization();

                while (readerAuthorization.Read())
                {
                    if (readerAuthorization["login"].ToString() == textBox_login.Text)
                    {
                        if (readerAuthorization["password"].ToString() == Hash_SHA1(passwordBox_password.Password))
                        {
                            flag = true;
                            GlobalVaribles.login = textBox_login.Text;
                            GlobalVaribles.prof_ID = Convert.ToInt32(readerAuthorization["profile_ID"]);
                            break;
                        }
                    }
                }

                // Если пользователь существует
                if (flag == true)
                {
                    profile_Window profWin = new profile_Window();
                    Application.Current.MainWindow.Close();
                    profWin.Show();
                }

                // Если пользователь не существует
                if (flag == false)
                    MessageBox.Show(error_loginPas, aut, MessageBoxButton.OK, MessageBoxImage.Error);
            }

            // Если данные в полях пусты //
            else
                MessageBox.Show(error_null, aut, MessageBoxButton.OK, MessageBoxImage.Error);
        }

        // Вернуться на пред. страницу
        private void back_Btn_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.GoBack();
        }

        // Метод хэширования пароля
        public string Hash_SHA1(string password)
        {
            using (SHA1Managed sha1 = new SHA1Managed())
            {
                var hash = sha1.ComputeHash(Encoding.UTF8.GetBytes(password));
                var sb = new StringBuilder(hash.Length * 2);
                foreach (byte b in hash)
                    sb.Append(b.ToString("X2"));
                return sb.ToString();
            }
        }

        // Открытие модуля изменения пароля (если забыл)
        private void button_OpenChangePassword_Click(object sender, RoutedEventArgs e)
        {
            AuthorizationGb.Visibility = Visibility.Hidden;
            button_Authorization.Visibility = Visibility.Hidden;
            button_OpenChangePassword.Visibility = Visibility.Hidden;
            ChangePasswordGb.Visibility = Visibility.Visible;
            button_ChangePassword.Visibility = Visibility.Visible;
        }

        // Изменение пароля
        private void button_ChangePassword_Click(object sender, RoutedEventArgs e)
        {
            bool IsTrue = false;

            // Проверка на верную фразу
            if (passwordBox_NewPassword.Password != "" &&
                textBox_RepeatLogin.Text != "" &&
                textBox_phrase.Text != "")
            {
                SqlDataReader readerAuthorization = ClassRequests.GetReader_Authorization();

                while (readerAuthorization.Read())
                {
                    if (readerAuthorization["login"].ToString() == textBox_RepeatLogin.Text)
                    {
                        if (readerAuthorization["secPhrase"].ToString() == textBox_phrase.Text)
                        {
                            IsTrue = true;
                            ClassRequests.ChangePassword_Authorization(Hash_SHA1(passwordBox_NewPassword.Password), textBox_RepeatLogin.Text);
                            AuthorizationGb.Visibility = Visibility.Visible;
                            button_Authorization.Visibility = Visibility.Visible;
                            button_OpenChangePassword.Visibility = Visibility.Visible;
                            ChangePasswordGb.Visibility = Visibility.Hidden;
                            button_ChangePassword.Visibility = Visibility.Hidden;
                            MessageBox.Show("Пароль успешно сменен!");
                        }
                    }
                }

                if (IsTrue == false)
                    MessageBox.Show("Логин или фраза не верная!");
            }
            else
                MessageBox.Show("Ошибка! Есть пустые поля.");
        }
    }
}
